home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ShareWare OnLine 2
/
ShareWare OnLine Volume 2 (CMS Software)(1993).iso
/
bbsdoors
/
pbank21b.zip
/
BANK.PPS
< prev
next >
Wrap
Text File
|
1993-06-15
|
13KB
|
264 lines
;*****************************************************************************
;* *
;* THE TIME BANK V2.1b *
;* *
;* using PCBoard Programming Language [PPL] *
;* *
;* Written by: Eyal Levi/Peter Veeck *
;* *
;* posted on Saltair: 06-16-93 *
;* *
;* *
;* Modification History: See History.doc file *
;* *
;*****************************************************************************
;
; Cmd line: bank withdraw nnn ba w nnn -- Save time
; bank deposit nnn ba d nnn -- Restore time
; bank show ba s -- Show bank time
; bank ba -- Interactive
;
:DEFINE_VARIABLES
INTEGER max_bank,max_withdraw,max_deposit,wtime_avail,dtime_avail
INTEGER chgtime,found,opts,keep_time,err_num,note_line,dlen,wlen
STRING bank_command,count,error,cmdline
STRING usertoken(10),cmdtoken(4)
BOOLEAN Iactive,error_log
:SET_PARAMETERS
Error_log = TRUE ; *change to FALSE for no error logging to caller log
note_line = 4 ; *Line to use for storage in NOTES PSA
;
; IF (U_SEC<255) DO ; can set allowable time parameters
MAX_bank = 60 ; by security here by defining new
MAX_WITHDRAW = 45 ; security levels and times.
MAX_deposit = 30 ; *max_bank is the maximum time that can be banked
keep_time = 5 ; *max_withdraw is the maximum time that can be
; ELSEIF (U_SEC=255) DO ; withdrawn with one running of the PPE
; MAX_bank = 300 ; *max_deposit is the maximum time that can be
; MAX_WITHDRAW = 150 ; deposited with one running of the PPE
; Keep_time = 5 ; *keep_time is the minimum time left on the
; ENDIF ; system for logoff and relogon
; * indicates over ridden by envirnment variable
: if used
:START
cmdline = TOKENSTR() ; store commandline
Iactive = FALSE
TOKENIZE cmdline
IF (TOKCOUNT() > 2) DO
PRINTLN "@X0EToo many command line arguments. Reenter.@X07"
PRINTLN "@X0EBANK @X07or @X0EBANK SHOW @X07or @X0EBANK WITHDRAW nn @X07or @X0EBANK DEPOSIT nn@X07"
GOTO EXIT
ENDIF
count = 1 ; Used while loops rather than
GETTOKEN cmdtoken(count) ; for loops as the while created 20 bytes
WHILE (cmdtoken(count) != "") DO ; less code
count = count + 1 ;
GETTOKEN cmdtoken(count) ;
ENDWHILE
IF (GETENV("PBANK")) DO ; Check for environment variable
TOKENIZE GETENV("PBANK") ;
GETTOKEN max_bank ; Need a set statement in DOS prior to
GETTOKEN max_withdraw ; loading PCBoard. Should read:
GETTOKEN max_deposit ;
GETTOKEN keep_time ; SET PBANK=nn nn nn nn n n
GETTOKEN note_line ;
GETTOKEN error_log ; where where the settings are in order
ENDIF ; of the variables listed here.
IF (!(PSA(6))) DO ;
PRINTLN "@X0CNotes PSA must be installed in PCBSM@X07." ; Check if Notes
PRINTLN "@X0CPlease Notify SYSOP.@X07" ; PSA is installed
goto EXIT
ENDIF
dlen = LEN(max_deposit)
wlen = LEN(max_withdraw)
GETUSER
IF ((U_NOTES(note_line)) = ("")) DO
opts = 0
GOTO NEWBANK
ELSE
found = 0
TOKENIZE U_NOTES(note_line) ; Split up NOTES line
opts = TOKCOUNT()
IF (opts > 10) DO ; too many tokens for array?
PRINTLN "@X0CInsufficient Bank storage space. Notify Sysop.@X07"
GOTO EXIT
ENDIF
FOR count = 1 TO opts ; Get bank info from notes line
GETTOKEN usertoken(count) ;
if (usertoken(count) == "BANK") found = count
ENDFOR
if (found > 0) goto BANK
ENDIF
:NEWBANK
IF (opts > 7) DO ; too many tokens for array?
PRINTLN "@X0CInsufficient Bank storage space. Notify Sysop.@X07"
GOTO EXIT
ENDIF
IF (!(INSTR(U_NOTES(note_line)," "))) DO ; room to store bank?
PRINTLN "@X0CInsufficient String storage space. Notify Sysop.@X07"
GOTO EXIT
ENDIF
found = opts + 1
opts = opts + 3
usertoken(found) = "BANK" ;
usertoken(found+1) = "TIME" ;
usertoken(found+2) = 0
:BANK ;BEGIN_MAIN
IF (LEFT(cmdtoken(1),1) = "S") DO ; Look for "S"how bank time
PRINTLN "@POS:10@@X0B",usertoken(found)," ",usertoken(found+1),": @X0E",usertoken(found+2)," @X07min."
GOTO EXIT
ELSEIF (LEFT(cmdtoken(1),1) = "D") GOTO DEPOSIT ; Look for "D"eposit
ELSEIF (LEFT(cmdtoken(1),1) = "W") GOTO WITHDRAW ; look for "W"ithdraw
ENDIF
:INTERACTIVE
if (GRAFMODE{} = "N") DO ; for CTTY mode
PRINTLN "You are unable to use the Time Bank interractively in your current node."
PRINTLN "Either change your mode to GRAPHICS or ANSI or enter from the command line."
PRINTLN "Syntex is: BANK SHOW to display time in bank."
PRINTLN " BANK DEPOSIT nn to deposit time in bank."
PRINTLN " BANK WITHDRAW nn to withdraw time from bank."
GOTO EXIT
ENDIF
iactive = TRUE
:SCREEN_DRAW ; you can edit this screen with PCBedit
PRINTLN "@CLS@@X07"
PRINTLN "@X07"
PRINTLN "@X07"
PRINTLN "@X07 @X77 @X7F┌────────────────────────────────────────────@X7F┐@POS:79@@X07"
PRINTLN "@X0F @X08█@X78 @X70│ @X7A@BOARDNAME@ Time Bank @POS:64@@X7F│@POS:79@@X07"
PRINTLN "@X0F @X08█@X78 @X70└────────────────────────────────────────────@X7F┘@POS:79@@X07"
PRINTLN "@X0F @X08█@X78 @X7F┌─────────────────────┐ ┌─────────────────────────────────────@X7F┐ @X07"
PRINTLN "@X0F @X08█@X78 @X70│ @X7BD@X78)@X71eposit time @X7F│ @X70│ @X7BIn your Account@X78: @X7E @X78 @X7F│ @X07"
PRINTLN "@X0F @X08█@X78 @X70│ @X7BW@X78)@X71ithdraw time @X7F│ @X7F@X70│ @X79Maximum Bank Balance@X78: @X7E @X78 @X7F│ @X07"
PRINTLN "@X0F @X08█@X78 @X70│ @X7BH@X78)@X71elp! @X7F│ @X70│ @X7F│ @X07"
PRINTLN "@X0F @X08█@X78 @X70│ @X7F│ @X70│ @X7EAvailable for Withdrawal@X78: @X7E @X78 @X7F│ @X07"
PRINTLN "@X0F @X08█@X78 @X70│ @X7BQ@X78)@X74uit to @X74BBS @X7F│ @X70│ @X7EAvailable for Deposit @X78: @X7E @X78 @X7F│ @X07"
PRINTLN "@X0F @X08█@X78 @X70│ @X7BG@X78)@X74oodbye @X7F│ @X70│ @X79Maximum Withdrawal P/Day@X78: @X7E @X78 @X7F│ @X07"
PRINTLN "@X0F @X08█@X78 @X70└─────────────────────@X7F┘ @X70└─────────────────────────────────────@X7F┘ @X07"
PRINTLN "@X0F @X08█@X78 @X07"
PRINTLN "@X08 █@X78 @X07"
PRINTLN "@X08 █@X78 @X07"
PRINTLN "@X08 ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀@X07"
:ENTRIES
Dtime_avail = Max_deposit
Wtime_avail = usertoken(found+2)
:REENTRY
Bank_Command=""
IF (Wtime_avail > MAX_WITHDRAW) Wtime_avail = MAX_WITHDRAW
IF (Dtime_avail > MAX_bank - usertoken(found+2)) Dtime_avail = Max_bank - usertoken(found+2)
IF (Dtime_avail > MINLEFT() - keep_time) Dtime_avail = MINLEFT() - keep_time
IF (dtime_avail < 0) dtime_avail = 0
ANSIPOS 53,8 ;
PRINT "@X75",usertoken(found+2)," @X78Min @X07" ; Position the cursor and
ANSIPOS 58,9 ; put in the numbers
PRINT "@X75",MAX_bank," @X78Min. @X07" ;
ANSIPOS 62,11 ;
PRINT "@X75",wtime_AVAIL," @X78Min. @X07" ;
ANSIPOS 62,12 ;
PRINT "@X75",dtime_AVAIL," @X78Min. @X07" ;
ANSIPOS 62,13 ;
PRINT "@X75",MAX_WITHDRAW," @X78Min. @X07" ;
ANSIPOS 0,19
INPUTSTR "(@X0C@TIMELEFT@ @X0Emin. left) Command",Bank_Command,0Eh,1,MASK_ALNUM(),FIELDLEN+GUIDE+UPCASE+LFBEFORE+LFAFTER+ERASELINE
IF (Bank_Command = "D") GOTO DEPOSIT ;
IF (Bank_Command = "W") GOTO WITHDRAW ; what to do
IF (Bank_Command = "H") DO ;
IF (EXIST(HELPPATH() + "BANK")) DISPFILE HELPPATH() + "BANK",LANG+SEC+GRAPH
GOTO INTERACTIVE
ENDIF
IF (Bank_Command = "Q") GOTO EXIT ; get out
IF (Bank_Command = "G") GOTO BYE ;
IF (Bank_Command = "") GOTO EXIT ;
GOTO ENTRIES
:DEPOSIT
IF (iactive = TRUE) DO
chgtime = dtime_avail
CLREOL
INPUTSTR "Enter the Amount to Deposit: ",chgtime,0Eh,dlen,MASK_NUM(),FIELDLEN+GUIDE+UPCASE+ERASELINE
ELSE
chgtime = cmdtoken(2)
IF (chgtime < 0) chgtime = 0
ENDIF
IF (chgtime + usertoken(found+2) > max_bank) DO
err_num = 1
ELSEIF (chgtime > max_deposit) THEN err_num = 2
ELSEIF (chgtime > (MINLEFT() - keep_time)) THEN err_num = 3
ELSE
usertoken(found+2) = usertoken(found+2) + chgtime
U_NOTES(note_line) = usertoken(1) ; Put U_NOTES back
FOR count = 2 TO (opts) ; together
U_NOTES(note_line) = U_NOTES(note_line)+" "+usertoken(count) ;
ENDFOR
PUTUSER ; update bank
ADJTIME -chgtime ; update board time
dtime_avail = dtime_avail - chgtime
if (dtime_avail < 0) DO
dtime_avail = 0
ENDIF
err_num = 0
ENDIF
:DERROR ; Deposit error displays -- roll your own
IF (err_num = 0) DO
PRINTLN "@X0CDepositing @X0E",chgtime,"@X0E Min@X0C to Your Account @X07"
LOG "Time Bank Deposit: " + STRING(chgtime) + " Min.",0
ELSEIF (err_num = 1) DO
PRINTLN "@X0CThe maximum allowed bank time is @X0B",max_bank," min. @X07@BEEP@"
IF (error_log = TRUE) Log "Attempted to Deposit More than Maximum Bank Time",0
ELSEIF (err_num = 2) DO
PRINTLN "@X0CThe Maximum daily Deposit is: @X0B",max_deposit," Min. @X07@BEEP@"
IF (error_log = TRUE) Log "Attempted to Exceed Max daily Deposit",0
ELSEIF (err_num = 3) DO
PRINTLN "@X0CYou must maintain @X0B",keep_time," Min. for logoff. @X07@BEEP@"
IF (error_log = TRUE) Log "Attempted to store logoff allotment",0
ENDIF
if (iactive = TRUE) GOTO REENTRY
goto exit
:WITHDRAW
IF (iactive = TRUE) DO
CLREOL
INPUTSTR "Enter the Amount to Withdraw:",chgtime,0Eh,wlen,MASK_NUM(),FIELDLEN+GUIDE+UPCASE+ERASELINE
ELSE
chgtime = cmdtoken(2)
IF (chgtime < 0) chgtime = 0
ENDIF
IF (usertoken(found+2) = 0) DO
err_num = 1
ELSEIF (chgtime > usertoken(found+2)) DO
err_num = 2
ELSEIF (chgtime > max_withdraw) DO
err_num = 3
ELSE
usertoken(found+2) = usertoken(found+2) - chgtime
U_NOTES(note_line) = usertoken(1)
FOR count = 2 TO (opts)
U_NOTES(note_line) = U_NOTES(note_line)+ " " + usertoken(count)
ENDFOR
IF (chgtime < 0) chgtime = 0
PUTUSER ; update bank
ADJTIME chgtime ; update board time
wtime_avail = wtime_avail - chgtime
if (wtime_avail < 0) do
wtime_avail = 0
ENDIF
err_num = 0
ENDIF
:WERROR ; Withdrawal error displays -- roll your own
IF (err_num = 0) DO
PRINTLN "@X0CWithdrawing @X0E ",chgtime," Min@X0C from Your Account @X07"
LOG "Time Bank Withdrawal: " + STRING(chgtime) + " Min.",0
ELSEIF (err_num = 1) DO
PRINTLN "@X0CYou Must deposit time in the Bank in order to Withdraw @X07@BEEP@"
IF (error_log = TRUE) Log "Attempted to Withdraw : No Time in the Bank!",0
ELSEIF (err_num = 2) DO
PRINTLN "@X0CYou cannot withdraw more than you have. @X07@BEEP@"
IF (error_log = TRUE) LOG "Attempted to withdraw more than in bank.",0
ELSEIF (err_num = 3) DO
PRINTLN "@X0CMaximum daily withdrawal is @X0B",max_withdraw," min. @X07@BEEP@"
IF (error_log = TRUE) LOG "Attempted to excede max daily withdrawal.",0
ENDIF
if (iactive = TRUE) GOTO REENTRY
:EXIT
END
:BYE
GOODBYE